package com.gin.web.session;

import java.util.HashMap;
import java.util.Map;

/**
 * 项目 http session
 */
public class HttpSession {

    /**
     * 平台用户
     */
    public static final int TYPE_PLATFORM = 0;
    /**
     * 商家用户
     */
    public static final int TYPE_BUSINESS = 1;


    public HttpSession(String token) {
        this.token = token;
    }

    /**
     * 表示每个用户
     */
    private String token;
    /**
     * 最后一次活动时间
     */
    private long lastActivityTime;

    /**
     * 登录者的身份
     * 0 平台用户，1 商家用户
     */
    private Integer type;

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    /**
     * 需要保存的属性
     */
    private Map<String, Object> attribute = new HashMap<>(20);

    /**
     * 添加属性到 session里
     *
     * @param key   属性key
     * @param value 属性 value
     * @return
     */
    public void setAttribute(String key, Object value) {
        attribute.put(key, value);
    }

    /**
     * 获取属性值
     *
     * @param key 属性名称
     * @param clz 属性的类型，class
     * @param <T>
     * @return
     */
    public <T> T getAttribute(String key, T clz) {
        if (attribute.containsKey(key)) {
            return (T) attribute.get(key);
        }
        return null;
    }

    /**
     * 获取属性值
     *
     * @param key key
     * @param <T> 返回类型
     * @return
     */
    public <T> T getAttribute(String key) {
        if (attribute.containsKey(key)) {
            return (T) attribute.get(key);
        }
        return null;
    }


    /**
     * 删除属性
     *
     * @param key 属性key
     */
    public void removeAttreibute(String key) {
        attribute.remove(key);
    }

    public long getLastActivityTime() {
        return lastActivityTime;
    }

    public void setLastActivityTime(long lastActivityTime) {
        this.lastActivityTime = lastActivityTime;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    @Override
    public String toString() {
        return "HttpSession{" +
                "token='" + token + '\'' +
                ", lastActivityTime=" + lastActivityTime +
                ", attribute=" + attribute +
                '}';
    }
}
